# 列表：
# 定义：处理一组有序项目的数据结构
# 格式：列表名 = [元素1, 元素2, ...]
# 注意：列表的所有元素放在一对中括号[]中，并使用 , 分隔
#      一个列表中的数据类型可以各不相同

# ls = [1,2,'3',4,'a',3.14]


# print(type(ls))
# print(ls[2])
# print(type(ls[2]))
# print(type(ls[1]))
# print(type(ls[5]))

# 列表也可以进行切片操作
# print(ls[0:3:1])
# print(ls[0:5:2])

# 列表是可迭代对象，可以for循环遍历取值
# for i in ls:
#     print(i, end =', ')

# ================================================================================

# 1. 常见操作：
#
# 1.1 添加元素：
# append()  extend()  insert()
# ls = ['one','two','three','four','five','six','seven','eight']


# ls.append('nine') # 整体在后面顺序加入
# print(ls)

# ls.extend('nine') # 逐个字符分散添加
# print(ls)

# ls.insert(0,'zero') # 在指定位置插入，如果原来有元素，原有元素后移
# print(ls)


# ls1 = [1,2,3,4,5]
# # ls1.extend(6) # TypeError: 'int' object is not iterable
# # ls1.extend('6') 
# # extend()里要用可迭代对象
# ls1.extend([6])
# # ls1.append(6)
# print(ls1)

# -----------------------------------------------------------

# 1.2 修改元素：
# 直接通过下标修改
# ls = [1,2,3]
# ls[1] = 4
# print(ls)

# -----------------------------------------------------------

# 1.3 查找元素：
# in: 判断元素是否在列表中，如果存在，返回True，不存在返回False
# not in: 判断元素是否在列表中，如果存在，返回False，不存在返回True
# ls = [1,2,3,4,'a','b','c']
# print('b' in ls)
# print('d' in ls)


# 案例：
# 用户输入昵称，重复则不能使用
# name_list = ['zhangsan','lisi','wangwu']
#
# while True:
#     name = input('请输入昵称：')
#
#     if name in name_list:
#         print("昵称已存在")
#     else:
#         print(f"昵称{name}设置完成")
#         name_list.append(name)
#         print(name_list)
#         break


# index: 返回指定数据所在位置下标，如果找不到就报错
# count: 统计指定数据在当前列表的出现次数
# 跟字符串中的用法相同

#---------------------------------------------------

# 1.4 删除元素
# (1) del
# ls = ['a','b','c','d']
#
# # del ls
# # print(ls)
#
# del ls[2]
# print(ls)

# (2) pop: 删除指定下标的数据，python3版本默认删除最后一个元素
# ls = ['a','b','c','d']
# ls.pop()
# print(ls)
# ls.pop(0) # 不能指定元素，只能指定下标
# print(ls)

# (3) remove(): 根据元素值进行删除
# ls = ['a','b','c','d','e','f','d','d']
# ls.remove('d') # 如果有重复，默认只删除第一个
# print(ls)


# ==========================================================
# 1.5 排序
# sort(): 将列表按特定顺序重新排序，默认从小到大
# reverse: 倒序，将列表倒置

# ls = [1,6,2,4,8,3,5,7,9]
#
# # ls.sort()
# # print(ls)
#
# ls.reverse()
# print(ls)


#==========================================================
# 1.6 列表推导式

# 格式1：[表达式 for 变量 in 列表]
# 注意：in 后面不仅可以放列表，还可以放range()、可迭代对象

# ls = [1,2,3,4,5,6]
# [print(i, end = ', ') for i in ls] # 前面的i是表达式，后面是临时变量
# print()
# [print(i*5, end = ', ') for i in ls]

# ls = []
# # for i in range(1,6):
# #     ls.append(i)
# # print(ls)
#
# [ls.append(i) for i in range(1,6)]
# print(ls)

# 格式2：[表达式 for 变量 in 列表 if 条件]
# 把偶数放进列表：
# ls = []
# [ls.append(i) for i in range(10) if i%2==0]
# print(ls)
# 把奇数放进列表：
# ls = []
# [ls.append(i) for i in range(11) if i%2!=0]
# print(ls)

# 1.7 列表嵌套
# ls = [[1,2,3],[4,5,6],[7,8,9]]
# print(ls[0]) # [1,2,3]
# print(ls[0][1]) # 2
